package com.jzbooks.utils;

import com.jzbooks.enums.ResultCodeEnum;
import com.jzbooks.exception.BusinessException;
import lombok.Getter;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * @author mingPeng
 * @date 2021/4/30 13:06
 * @Description : 文件工具
 */
@Component
@Getter
public class ImgUtil {

    /**
     * 系统文件分割符
     */
    private String fileDivision = System.getProperty("file.separator");

    /**
     * 得到绝对路径
     */
    private String filePath="file:"+System.getProperty("user.dir")+fileDivision;


    /**
     * img文件夹
     */
    private String fileImgPath = filePath+"img"+fileDivision;

    /**
     * 存放用户头像文件夹
     */
    private String fileUserImgPath = fileImgPath+"userImg"+fileDivision;

    /**
     * 存放管理员头像文件夹
     */
    private String fileAdminImgPath = fileImgPath+"adminImg"+fileDivision;

    /**
     * 存放图书图片文件夹
     */
    private String fileBookImgPath = fileImgPath+"bookImg"+fileDivision;

    /**
     * 轮播图图片文件夹
     */
    private String fileCarouselImgPath = fileImgPath+"carouselImg"+fileDivision;


    /**
     * @Description : 判断多重文件夹是否存在
     * @param null
     * @return
     */
    public void FileExists(String fileExists){
        File file=new File(filePath+fileExists);
        if (!file.exists()){
            file.mkdirs();
        }
    }

    /**
     * @Description : 更新图片,返回更新后的文件名字
     * @param null
     * @return
     */
    public String updateImg(MultipartFile multipartFile,String filePath,String beforeImgName){
        //判断文件夹是否存在，不存在就创建
        FileExists(filePath);

        //以前存储得到图像对象
        File beforePath = new File(filePath+beforeImgName);
        //判断是否有图片，有就删除
        if (beforePath.exists()){
            beforePath.delete();
        }
        //新的图片名称
        String newImeName = System.currentTimeMillis()+multipartFile.getOriginalFilename();

        //新的图片路径
        File dest = new File(filePath+newImeName);

        try {
            //存入文件夹
            multipartFile.transferTo(dest);
            return newImeName;
        } catch (IOException e) {
            throw new BusinessException(ResultCodeEnum.SYSTEM_INNER_ERROR);
        }finally {
            return null;
        }
    }

    /**
     * @Description :  修改用户头像
     * @param beforeImgName 图片原来的名字
     * @return
     */
    public String updateUserImg(MultipartFile multipartFile,String beforeImgName){
        return updateImg(multipartFile,fileUserImgPath,beforeImgName);
    }

    /**
     * @Description : 修改管理员头像
     * @param beforeImgName 图片原来的名字
     * @return
     */
    public String updateAdminImg(MultipartFile multipartFile,String beforeImgName){
        return updateImg(multipartFile,fileAdminImgPath,beforeImgName);
    }

    /**
     * @Description : 修改书籍图片
     * @param beforeImgName 图片原来的名字
     * @return
     */
    public String updateBookImg(MultipartFile multipartFile,String beforeImgName){
        return updateImg(multipartFile,fileBookImgPath,beforeImgName);
    }

    /**
     * @Description : 修改轮播图
     * @param beforeImgName 图片原来的名字
     * @return
     */
    public String updateCarouselImg(MultipartFile multipartFile,String beforeImgName){
        return updateImg(multipartFile,fileCarouselImgPath,beforeImgName);
    }


}
